
package com.designMode.interpreter;

import com.designMode.interpreter.terminal.Variable;

import java.util.HashMap;
import java.util.Map;

/**
 * @author 顾博君
 * @ClassName Context
 * @Date 2016-1-19 下午12:59:16
 * @Function 上下文
 */
public class Context {
    /**
     * 变量存储区
     */
    private Map<Variable, TerminalExpression> map = new HashMap<>();

    /**
     * 变量赋值
     *
     * @param var   变量
     * @param value 值
     */
    public void assign(Variable var, TerminalExpression value) {
        map.put(var, value);
    }

    /**
     * 查看变量内容
     *
     * @param var 变量
     * @return 变量值
     * @throws IllegalArgumentException
     */
    public Object lookup(Variable var) throws IllegalArgumentException {
        TerminalExpression value = map.get(var);
        if (value == null) {
            throw new IllegalArgumentException();
        }
        return value.interpret(this);
    }
}
